package com.algorithm.array;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.jupiter.api.DisplayName;

import java.util.ArrayList;
import java.util.List;

@Slf4j
public class ArraySulotion05 {
    public String reverseVowels(String s) {
        List<Character> c = new ArrayList<>();
        c.add('a');
        c.add('e');
        c.add('i');
        c.add('o');
        c.add('u');
        c.add('A');
        c.add('E');
        c.add('I');
        c.add('O');
        c.add('U');

        char[] chars = s.toCharArray();
        int i = 0, j = chars.length - 1;
        while (i < j) {
            if (c.contains(chars[i]) && c.contains(chars[j])) {
                char tmp = chars[i];
                chars[i] = chars[j];
                chars[j] = tmp;
                i++;
                j--;
            } else if (!c.contains(chars[i]) && c.contains(chars[j])) {
                i++;
            } else if (c.contains(chars[i]) && !c.contains(chars[j])) {
                j--;
            } else {
                i++;
                j--;
            }
        }
        return new String(chars);
    }

    @Test
    @DisplayName("给你一个字符串 s ，仅反转字符串中的所有元音字母，并返回结果字符串。\n" +
            "元音字母包括 'a'、'e'、'i'、'o'、'u'，且可能以大小写两种形式出现。")
    public void test(){
        String s = "leetcode";
        String s1 = reverseVowels(s);
        log.info("result is {}",s1);
    }

    public String reverseVowels1(String s) {
        char[] chars = s.toCharArray();
        int i = 0, j = chars.length - 1;
        while (i < j) {
            if (isvowel(chars[i]) && isvowel(chars[j])) {
                char tmp = chars[i];
                chars[i] = chars[j];
                chars[j] = tmp;
                i++;
                j--;
            } else if (!isvowel(chars[i]) && isvowel(chars[j])) {
                i++;
            } else if (isvowel(chars[i]) && !isvowel(chars[j])) {
                j--;
            } else {
                i++;
                j--;
            }
        }
        return new String(chars);
    }

    private  boolean isvowel(char c) {
        if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U')
            return true;
        else
            return false;
    }

    @Test
    @DisplayName("给你一个字符串 s ，仅反转字符串中的所有元音字母，并返回结果字符串。\n" +
            "元音字母包括 'a'、'e'、'i'、'o'、'u'，且可能以大小写两种形式出现。")
    public void test1(){
        String s = "leetcode";
        String s1 = reverseVowels1(s);
        log.info("result is {}",s1);
    }

}
